package Dominio;

import hbt.PersistentObject;






import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.*;

import Enums.TipoLista;
import dto.CondicionTO;
import dto.ItemListaDePrecioTO;
import dto.ListaDePrecioTO;


@Entity
@Table(name="listas_precios")
public class ListaDePrecio extends PersistentObject {

	private static final long serialVersionUID = 1L;

	@Column(name = "numero")
	private int numero;
	
	@Column(name="tipoLista")
	@Enumerated(EnumType.ORDINAL)
	private TipoLista tipo;
	
	@ManyToOne
	@JoinColumn(name="idProveedor")
	private Proveedor proveedor;
	
	@Column(name = "fechaVigencia")
	@Temporal(TemporalType.DATE)
	private Date fechaVigencia;
	
	@Column(name = "termino")
	private int termino;
		
	@Column(name = "reemplaza")
	private int reemplaza;
	
	@ManyToMany(cascade = {CascadeType.PERSIST})
	@JoinTable(name="lista_condiciones",
		joinColumns=@JoinColumn(name="idLista"),
		inverseJoinColumns=@JoinColumn(name="idCondicion"))
	private List<Condicion> condiciones = new ArrayList<Condicion>();
		
	/*CAMBIO 01/07/2014*/
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="idListaDePrecio")
	private List <ItemListaDePrecio> itemsListaDePrecio;

	
	public List<ItemListaDePrecio> getItemsListaDePrecio() {
		return itemsListaDePrecio;
	}
	public void setItemsListaDePrecio(List<ItemListaDePrecio> items) {
		this.itemsListaDePrecio = items;
	}
	
	public int getTermino() {
		return termino;
	}
	public void setTermino(int termino) {
		this.termino = termino;
	}
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public int getReemplaza() {
		return reemplaza;
	}
	public void setReemplaza(int reemplaza) {
		this.reemplaza = reemplaza;
	}
	
	public TipoLista getTipo() {
		return tipo;
	}
	public void setTipo(TipoLista tipo) {
		this.tipo = tipo;
	}
	public Proveedor getProveedor() {
		return proveedor;
	}
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}
	public Date getFechaVigencia() {
		return fechaVigencia;
	}
	public void setFechaVigencia(Date fechaVigencia) {
		this.fechaVigencia = fechaVigencia;
	}
	public List<Condicion> getCondiciones() {
		return condiciones;
	}
	public void setCondiciones(List<Condicion> condiciones) {
		this.condiciones = condiciones;
	}
	
	public ListaDePrecioTO toTO() 
	{
		ListaDePrecioTO lista = new ListaDePrecioTO();
		
		lista.setFechaVigencia(fechaVigencia);
		lista.setNumero(numero);
		lista.setProveedor(proveedor.toTO());
		lista.setReemplaza(reemplaza);
		lista.setTermino(termino);
		lista.setTipo(tipo.ordinal());
		
		List<ItemListaDePrecioTO> itemsListaDePrecioTO = new ArrayList<ItemListaDePrecioTO>();
		
		for(ItemListaDePrecio ilp : this.itemsListaDePrecio)
		{
			ItemListaDePrecioTO itemTO = ilp.toTO(); 
			
			ListaDePrecioTO lisAuxTO = new ListaDePrecioTO();
			lisAuxTO.setProveedor(lista.getProveedor());
			lisAuxTO.setNumero(lista.getNumero());
			itemTO.setListaDePrecio(lisAuxTO);
			
			itemsListaDePrecioTO.add(itemTO);
			
		}
		
		lista.setItemsListaDePrecio(itemsListaDePrecioTO);
		
		List<CondicionTO> condicionesTO = new ArrayList<CondicionTO>();
		
		for(Condicion ilc : this.condiciones)
		{
			condicionesTO.add(ilc.toTO());
		}
		
		lista.setCondiciones(condicionesTO);
		
		return lista;
	}
}
